package bbs;
 
import java.sql.*; 
import java.text.*; 

import oracle.sql.INTERVALDS;

import org.apache.logging.log4j.*;  

/**
 * The super class of all classes in the bbs package.
 * @author sunabove
 *
 */
public abstract class BbsObject implements Text { 
	
	static final Logger logger = LogManager.getLogger( BbsObject.class );
	
	public BbsObject() { 
	}  
	
	/** 날짜를 포매팅한다.
	 * 
	 * @param date
	 * @return
	 */
	public String formatDate( Timestamp date ) {
		return date == null ? "" : dateFormat.format( date );
	}
	
	/**
	 * 오라클의 시각차를 나타내는 클래스(INTERVALDS)를 텍스트로 포맷한다.
	 * 년도차가 0 인 경우는 나타내지 않는다.
	 * 소수점 이하의 초정보는 나타내지 않는다.
	 * @param intervalds 오라클의 시각차(INTERVALDS)를 나타내는 객체
	 * @return
	 */
	public String formatDate( INTERVALDS intervalds ) {
		String text = "";
		if( intervalds != null ) {
			text = intervalds.toString();
			String [] split = text.split( " " );
			if( split != null && split.length > 1 ) {
				String year = split[0];
				if( year.equals( "0") ) {
					text = split[1];
				} else if( year.equals( "-0") ) {
					text = "-" + split[1];
				}
			} 			
		}
		
		int dotIdx = text.lastIndexOf( "." );
		if( dotIdx > -1 ) {
			// 소수 이하 초를 나타내는 것은 삭제함.
			text = text.substring( 0, dotIdx );
		}
		return text;
	}
	
	/**
	 * 문자열의 길이가 최대 길이 보다 크면, ... 을 뒤에 추가한다.
	 * @param text
	 * @param maxLen
	 * @return
	 */
	public String formatString( String text , int maxLen ) {
		if( text == null ) {
			return "";
		} else if( text.length() < maxLen ) {
			return text ;
		} else {
			return text.substring(0, maxLen ) + "...";
		}
	} 
	
	/** 
	 * 정수를 포매팅한다. 
	 * @param i
	 * @return
	 */
	public String formatInt( Integer i ) {
		return intFormat.format( i );
	}
	
	/**
	 * 문자열을 정수로 파싱한다. 파싱 실패시 널 값을 반환한다.
	 * @param text
	 * @return
	 */
	public Integer parseInt( String text ) {
		try {
			return Integer.parseInt( text.trim() );
		} catch ( Exception e) {
			return null;
		}
	}
	
	public String getSQLErrorMessage( SQLException e ) {
		//e.printStackTrace();
		
		return e.getMessage().trim();
	}
	
	private static final DecimalFormat 	intFormat	= new DecimalFormat("0000"); 
	public  static final DateFormat 	dateFormat	= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

}
